﻿using System;

namespace UtilZ.Dotnet.Ex.Base
{
    /// <summary>
    ///  DateTime类型扩展方法类
    /// </summary>
    public static class DateTimeEx
    {
        /// <summary>
        /// 比较日期的年月日是否相等
        /// </summary>
        /// <param name="dt">日期</param>
        /// <param name="dstTime">目标日期</param>
        /// <returns>相等返回true,不等返回false</returns>
        public static bool CompareDate(this DateTime dt, DateTime dstTime)
        {
            return dt.Year == dstTime.Year && dt.DayOfYear == dstTime.DayOfYear;
        }

        /// <summary>
        /// 日期时间戳转为日期时间
        /// </summary>
        /// <param name="timestampValue">日期时间戳值</param>
        /// <returns>日期时间</returns>
        public static DateTime TimestampToDateTime(double timestampValue)
        {
            DateTime timestampStandardDateTime = new DateTime(1970, 1, 1, 0, 0, 0, System.Globalization.Calendar.CurrentEra);//时间戳基准时间
            var ts = TimeSpan.FromMilliseconds(timestampValue);
            DateTime dateTime = timestampStandardDateTime.Add(ts);//加上时间戳值
            dateTime = dateTime.Add(TimeZoneInfo.Local.BaseUtcOffset);//加上时区时间偏移
            return dateTime;
        }



        /// <summary>
        /// `获取日期板式化字符说明列表
        /// </summary>
        /// <returns>日期板式化字符说明列表</returns>
        public static string GetDateTimeFormartCharList()
        {
            /**********************************************************************************************************
             * 
             * 符号　　 语法　　 	                示例(2016-05-09 13:09:55:2350) 	        格式说明
             * y 	    DateTime.Now.ToString() 	2016/5/9 13:09:55 	                    短日期 长时间
             * d 	    DateTime.Now.ToString("d") 	2016/5/9 	                            短日期
             * D 	    DateTime.Now.ToString("D") 	2016年5月9日 	                        长日期
             * f 	    DateTime.Now.ToString("f") 	2016年5月9日 13:09 	                    长日期 短时间
             * F 	    DateTime.Now.ToString("F") 	2016年5月9日 13:09:55 	                长日期 长时间
             * g 	    DateTime.Now.ToString("g") 	2016/5/9 13:09 	                        短日期 短时间
             * G 	    DateTime.Now.ToString("G")  2016/5/9 13:09:55 	                    短日期 长时间
             * t 	    DateTime.Now.ToString("t") 	13:09 	                                短时间
             * T 	    DateTime.Now.ToString("T") 	13:09:55 	                            长时间
             * u 	    DateTime.Now.ToString("u") 	2016-05-09 13:09:55Z 	 
             * U 	    DateTime.Now.ToString("U") 	2016年5月9日 5:09:55 	                本初子午线的长日期和长时间
             * m 	    DateTime.Now.ToString("m") 	5月9日 	 
             * M 	    DateTime.Now.ToString("M") 	5月9日 	 
             * r 	    DateTime.Now.ToString("r") 	Mon, 09 May 2016 13:09:55 GMT 	 
             * R 	    DateTime.Now.ToString("R") 	Mon, 09 May 2016 13:09:55 GMT 	 
             * y 	    DateTime.Now.ToString("y") 	2016年5月 	 
             * Y 	    DateTime.Now.ToString("Y") 	2016年5月 	 
             * o 	    DateTime.Now.ToString("o") 	2022-01-20T09:14:08.2336186+08:00
             * O 	    DateTime.Now.ToString("O") 	2022-01-20T09:14:08.2336186+08:00
             * s 	    DateTime.Now.ToString("s") 	2016-05-09T13:09:55 	 
             **********************************************************************************************************/

            return @"/**********************************************************************************************************
 * 符号　　 语法　　 	                示例(2016-05-09 13:09:55:2350) 	        	格式说明
 * y 	    DateTime.Now.ToString() 	2016/5/9 13:09:55 	                    	短日期 长时间
 * d 	    DateTime.Now.ToString(""d"") 	2016/5/9 	                            短日期
 * D 	    DateTime.Now.ToString(""D"") 	2016年5月9日 	                        长日期
 * f 	    DateTime.Now.ToString(""f"") 	2016年5月9日 13:09 	                    长日期 短时间
 * F 	    DateTime.Now.ToString(""F"") 	2016年5月9日 13:09:55 	                长日期 长时间
 * g 	    DateTime.Now.ToString(""g"") 	2016/5/9 13:09 	                        短日期 短时间
 * G 	    DateTime.Now.ToString(""G"")  2016/5/9 13:09:55 	                    短日期 长时间
 * t 	    DateTime.Now.ToString(""t"") 	13:09 	                                短时间
 * T 	    DateTime.Now.ToString(""T"") 	13:09:55 	                            长时间
 * u 	    DateTime.Now.ToString(""u"") 	2016-05-09 13:09:55Z 	 
 * U 	    DateTime.Now.ToString(""U"") 	2016年5月9日 5:09:55 	                本初子午线的长日期和长时间
 * m 	    DateTime.Now.ToString(""m"") 	5月9日 	 
 * M 	    DateTime.Now.ToString(""M"") 	5月9日 	 
 * r 	    DateTime.Now.ToString(""r"") 	Mon, 09 May 2016 13:09:55 GMT 	 
 * R 	    DateTime.Now.ToString(""R"") 	Mon, 09 May 2016 13:09:55 GMT 	 
 * y 	    DateTime.Now.ToString(""y"") 	2016年5月 	 
 * Y 	    DateTime.Now.ToString(""Y"") 	2016年5月 	 
 * o 	    DateTime.Now.ToString(""o"") 	2016-05-09T13:09:55.2350000 	 
 * O 	    DateTime.Now.ToString(""O"") 	2016-05-09T13:09:55.2350000        	 
 * s 	    DateTime.Now.ToString(""s"") 	2016-05-09T13:09:55 	 
 **********************************************************************************************************/";
        }
    }
}
